package pattern.prototype;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @description 原型模式
 * @author fg
 * @date 2017年9月29日
 */
public class Prototype implements Cloneable,Serializable{
	private static final long serialVersionUID = 1L;  
	private Integer i = 0;
	private String s = "";
	/**
	 * @description 浅复制
	 * @author fg
	 * @throws CloneNotSupportedException 
	 * @date 2017年9月29日
	 */
	public Object clone() throws CloneNotSupportedException {
		return (Prototype)super.clone();
	}
	
	/**
	 * @description 深复制
	 * @author fg
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 * @date 2017年9月29日
	 */
	public Object deepClone() throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        ObjectOutputStream oos = new ObjectOutputStream(bos);  
        oos.writeObject(this);  
  
        /* 读出二进制流产生的新对象 */  
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());  
        ObjectInputStream ois = new ObjectInputStream(bis);  
        return ois.readObject(); 
		
	}

	public Integer getI() {
		return i;
	}


	public String getS() {
		return s;
	}

	
	
}
